home *** CD-ROM | disk | FTP | other *** search
/ Complete Linux / Complete Linux.iso / docs / apps / circuits / spice2g6.z / spice2g6 / spice / Fortran / update.f < prev    next >
Encoding:
Text File  |  1989-02-03  |  1.8 KB  |  49 lines

  1.       subroutine update(vinit,loct,node1,node2,nupda,icheck)
  2.       implicit double precision (a-h,o-z)
  3. c
  4. c     this routine updates and limits the controlling variables for the
  5. c nonlinear controlled sources.
  6. c
  7. c spice version 2g.6  sccsid=tabinf 3/15/83
  8.       common /tabinf/ ielmnt,isbckt,nsbckt,iunsat,nunsat,itemps,numtem,
  9.      1   isens,nsens,ifour,nfour,ifield,icode,idelim,icolum,insize,
  10.      2   junode,lsbkpt,numbkp,iorder,jmnode,iur,iuc,ilc,ilr,numoff,isr,
  11.      3   nmoffc,iseq,iseq1,neqn,nodevs,ndiag,iswap,iequa,macins,lvnim1,
  12.      4   lx0,lvn,lynl,lyu,lyl,lx1,lx2,lx3,lx4,lx5,lx6,lx7,ld0,ld1,ltd,
  13.      5   imynl,imvn,lcvn,nsnod,nsmat,nsval,icnod,icmat,icval,
  14.      6   loutpt,lpol,lzer,irswpf,irswpr,icswpf,icswpr,irpt,jcpt,
  15.      7   irowno,jcolno,nttbr,nttar,lvntmp
  16. c spice version 2g.6  sccsid=status 3/15/83
  17.       common /status/ omega,time,delta,delold(7),ag(7),vt,xni,egfet,
  18.      1   xmu,sfactr,mode,modedc,icalc,initf,method,iord,maxord,noncon,
  19.      2   iterno,itemno,nosolv,modac,ipiv,ivmflg,ipostp,iscrch,iofile
  20. c spice version 2g.6  sccsid=blank 3/15/83
  21.       common /blank/ value(200000)
  22.       integer nodplc(64)
  23.       complex cvalue(32)
  24.       equivalence (value(1),nodplc(1),cvalue(1))
  25. c
  26. c
  27.       go to (40,10,40,20,30,50), initf
  28.    10 vnew=vinit
  29.       go to 70
  30.    20 vnew=value(lx0+loct)
  31.       go to 70
  32.    30 vnew=value(lx1+loct)
  33.       go to 70
  34.    40 vnew=value(lvnim1+node1)-value(lvnim1+node2)
  35.       go to 60
  36.    50 call copy8(value(lx1+loct),value(lx0+loct),nupda)
  37.       xfact=delta/delold(2)
  38.       vnew=(1.0d0+xfact)*value(lx1+loct)-xfact*value(lx2+loct)
  39.    60 if (dabs(vnew).le.1.0d0) go to 80
  40.       delv=vnew-value(lx0+loct)
  41.       if (dabs(delv).le.0.1d0) go to 80
  42.       vlim=dmax1(dabs(0.1d0*value(lx0+loct)),0.1d0)
  43.       vnew=value(lx0+loct)+dsign(dmin1(dabs(delv),vlim),delv)
  44.       go to 70
  45.    70 icheck=1
  46.    80 value(lx0+loct)=vnew
  47.       return
  48.       end
  49.